//
//  UIimage+extension.swift
//  上海微博
//
//  Created by co on 16/2/25.
//  Copyright © 2016年 王南侠. All rights reserved.
//

import UIKit

extension UIImage{
    
    // 创建一个“点”图像
    class func zc_singleDoImage(color: UIColor) -> UIImage{
        
        //1.开启图形上下文
        UIGraphicsBeginImageContextWithOptions(CGSize(width: 1, height: 1), false, UIScreen.mainScreen().scale)
        
        //2.画图,填个颜色
        color.setFill()
        UIRectFill(CGRect(x: 0, y: 0, width: 1, height: 1))
        
        //3.从图形上下文获取图形
        let result = UIGraphicsGetImageFromCurrentImageContext()
        
        //4.关闭图形上下文
        UIGraphicsEndImageContext()
        
        //5.返回图像
        return result
        
    }
    
    /// 异步绘制图像 （异步不需要返回值）
    func cz_asynDrawImage(
        size:CGSize,isCorner:Bool = false,
        backColor: UIColor? = UIColor.whiteColor(),
        finshed : (image:UIImage)->())  {
        
        // 异步绘制图像，可以在子线程进行，因为没有跟新UI
        dispatch_async(dispatch_get_global_queue(0, 0)) { () -> Void in
            
            // 开启图像上下文 如果指定了背景颜色就不透明
            UIGraphicsBeginImageContextWithOptions(size,backColor != nil, UIScreen.mainScreen().scale)
            
            let rect = CGRect(origin: CGPointZero, size: size)
            
            // 设置填充颜色
            backColor?.setFill()
            UIRectFill(rect) // rectFill填充颜色
            
            // 设置圆角使用路径裁剪，写设置裁切路径。在绘制图像
            if isCorner {
                let path = UIBezierPath(ovalInRect: rect)
                UIRectClip(rect)
                
                // 添加路径 - 后续绘制都会别次路径裁剪掉
                path.addClip()
            }
            
            // 绘制图像
            self.drawInRect(rect)
            
            // 获取图像
            let result = UIGraphicsGetImageFromCurrentImageContext()
            
            // 关闭图形上下文
            UIGraphicsEndImageContext()
            
            // 主线程更新UI 完成回调 提示有时候异步也能更新UI 但是会非常慢
            dispatch_async(dispatch_get_main_queue()) {
             finshed(image: result)
                
            }
        }
        
    }
    
}

